package com.exit490.cfp.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.exit490.cfp.helper.DataSourceHelper;
import com.exit490.cfp.modelo.Categoria;

public class CategoriaDAO {

    public static String TABELA_NOME = "cfp_categoria";
    public static String COLUNA_ID = "id_categoria";
    public static String COLUNA_NOME = "nome_categoria";

    private DataSourceHelper data;
    private ContentValues content = new ContentValues();
    private Cursor cursor = null;
    private SQLiteDatabase sqlLite;
    private long linhasAfetadas;
    private ArrayList<Categoria> listaCategorias = new ArrayList<Categoria>();
    private String[] colunas = new String[] { COLUNA_ID, COLUNA_NOME };

    public CategoriaDAO(Context context) {
        System.out.println("passou aqui");
        data = new DataSourceHelper(context);
        sqlLite = data.getDatabase();
    }

    public boolean existeCategoria(Categoria categoria) {

        String queryNome = null;
        SQLiteDatabase sqlLite = data.getDatabase();
        String where = COLUNA_NOME + "= ?";
        String[] colunas = new String[] { COLUNA_NOME };
        String argumentos[] = new String[] { categoria.getNomeCategoria() };
        this.cursor = sqlLite.query(TABELA_NOME, colunas, where, argumentos, null, null, null);
        if (cursor.getCount() == 1 && cursor.moveToFirst()) {
            queryNome = cursor.getString(cursor.getColumnIndex(COLUNA_NOME));
        }

        cursor.close();
        return queryNome != null && queryNome.equals(categoria.getNomeCategoria());
    }

    public boolean cadastrarCategoria(Categoria categoria) {

        this.content.put(COLUNA_NOME, categoria.getNomeCategoria());
        linhasAfetadas = this.sqlLite.insert(TABELA_NOME, null, content);

        return sucesso();

    }

    public boolean removeGrupo(Categoria categoria) {

        String[] args = { String.valueOf(categoria.getIdCategoria()) };
        linhasAfetadas = this.sqlLite.delete(TABELA_NOME, COLUNA_ID + "=?", args);

        return sucesso();
    }

    public boolean atualizaNomeGrupo(Categoria categoria) {

        String[] args = { String.valueOf(categoria.getIdCategoria()) };
        this.content.put(COLUNA_NOME, categoria.getNomeCategoria());
        linhasAfetadas = this.sqlLite.update(TABELA_NOME, this.content, COLUNA_ID + "=?", args);

        return sucesso();

    }

    public String selectNomeGrupo(long id) {

        String nome = null;
        String[] args = { String.valueOf(id) };
        cursor = sqlLite.query(TABELA_NOME, colunas, COLUNA_ID + "=?", args, null, null, null);

        if (cursor != null & cursor.moveToFirst()) {
            nome = cursor.getString(cursor.getColumnIndex(COLUNA_NOME));
        }
        cursor.close();
        return nome;

    }

    public long selectIdGrupo(Categoria categoria) {

        long id = 0;
        String[] args = { categoria.getNomeCategoria() };
        cursor = sqlLite.query(TABELA_NOME, colunas, COLUNA_NOME + "=?", args, null, null, null);

        if (cursor != null & cursor.moveToFirst()) {
            id = cursor.getLong(cursor.getColumnIndex(COLUNA_ID));
        }
        cursor.close();
        return id;
    }

    public ArrayList<Categoria> listarTodasCategorias() throws Exception {

        cursor = sqlLite.query(TABELA_NOME, colunas, null, null, null, null, null);

        if (cursor != null & cursor.moveToFirst()) {
            do {
                Categoria categoria = new Categoria();
                categoria.setIdCategoria(cursor.getLong(cursor.getColumnIndex(COLUNA_ID)));
                categoria.setNomeCategoria(cursor.getString(cursor.getColumnIndex(COLUNA_NOME)));
                listaCategorias.add(categoria);

            } while (cursor.moveToNext());

        }
        cursor.close();

        return listaCategorias;
    }

    private boolean sucesso() {

        if (this.linhasAfetadas > 0) {
            return true;
        } else {
            return false;
        }
    }

}
